package executor;

import java.io.File;
import java.io.IOException;
import java.util.Date;
import boundary.Home;
import store.BaseStore;
import store.TutteRicette;
import store.TuttiCibi;
import store.TuttiMenu;
import calculator.EsportaImporta;
import dataview.Cibi;
import dataview.CriterioRicerca;
import dataview.EasyTextFile;
import dataview.Menus;
import dataview.Ricette;
import exceptions.DBException;

public class GestireImportExport {
	private Menus menuSelezionati;
	private Ricette ricetteSelezionate;
	private Cibi cibiSelezionati;
	private Home home;
	private Main main;
	
	public GestireImportExport(Main main, Home home) {
		this.main = main;
		this.home = home;
		home.creaAccedereImportExport(this);
	}
	
	public void importa(File file) {
		File etf = file;
		if (EsportaImporta.controllaEC(etf)) {
			try {
				Cibi c = EsportaImporta.estraiCibi(etf);
				TuttiCibi.getTuttiCibi().inserisciCibi(c);
				Ricette r = EsportaImporta.estraiRicette(etf, null);
				TutteRicette.getTutteRicette().inserisciRicette(r);
				Menus m = EsportaImporta.estraiMenu(etf, null, null);
				TuttiMenu.getTuttiMenu().inserisciMenu(m);
				BaseStore.save(false);
				home.setWaiting(false);
				home.fatto();
				return;
			} catch (Exception e) {
				home.setWaiting(false);
				System.err.println(e);
			}
		}
		home.fallito();
	}
	
	public void esporta(CriterioRicerca critCibi, CriterioRicerca critR, CriterioRicerca critM, String path) throws DBException, IOException {
		Menus m = new Menus();
		Ricette r = new Ricette();
		Cibi c = new Cibi();
		if (critM != null) {
			m = TuttiMenu.getTuttiMenu().ricercare(critM);
			r = m.ricetteUsate();
			c = m.cibiUsati();
		}
		if (critR != null) {
			Ricette tutte = r.unione(TutteRicette.getTutteRicette().ricercare(critR));
			r = r.unione(tutte.sottoRicette());
			r = r.unione(tutte);
			r = r.unione(r.sottoRicette());
			c = c.unione(r.cibiUsati());
		}
		if (critCibi != null) c = c.unione(TuttiCibi.getTuttiCibi().ricerca(critCibi));
		EasyTextFile file = EsportaImporta.esporta(c, r, m);
		file.print(path);
	}
}
